package cn.cw.liyebao;

import cn.cw.liyebao.domain.User;
import cn.cw.liyebao.mapper.UserMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@SpringBootTest
@RunWith(SpringRunner.class)
public class MainTest {

    @Autowired
    private UserMapper userMapper;

    @Test// 新增操作
    public void testAdd(){
        //第1步：创建一个user的实体类，然后给里面的属性赋值
        User user = new User();
        user.setName("小阿三");
        user.setAge(25);
        user.setKaoshiScore(708.88);
        user.setAddress("湖北武汉洪山区光谷广场");

        //第2步：调用mybatis-plus的内置新增方法
        userMapper.insert(user);
    }

    @Test //根据主键ID查对象数据（注意：查询时，查询的条件优先选择唯一标识）
    public void  testFindById(){
        Integer id = 2;
        User user = userMapper.selectById(id);
        System.out.println(user);

    }

    @Test//修改操作测试
    public void testUpdate(){
        //第1步：先根据主键ID将要查询的数据查出来
        User user = userMapper.selectById(2);
        //第2步：更新需要修改的内容
        user.setAddress("湖北江岸区");
        user.setAge(29);
        userMapper.updateById(user);//这行代码是调用mybatis-plus框架的内置方法

    }

    @Test //删除操作
    public void testDelete(){
        userMapper.deleteById(2);//调用内置方法，将主键=2的数据删除
    }

    @Test //查询操作:根据固定条件查询
    public void testFind(){
        //如：固定条件：根据姓名(阿三）+年龄（18-25）区间查询
        //第1步：先创建一个保存查询条件的对象
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //第2步：将查询的条件进行逐个添加，添加的位置全部在wrapper对象里
//        wrapper.eq() 拼接 等于的查询条件 equal单词简写
//              .like() 拼接 模糊查询的条件
//              .ge()  拼接 大于或等于的条件 是 greater and equal 单词首字母简写
//              .le() 拼接 小于或等于的条件  是 less and equal 单词首字母简写
        wrapper.like("name","阿三").ge("age",18).le("age",25);

        //第3步：根据封装的查询条件，调用内置查询方法，获取查询结果
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);

    }
    @Test //根据不固定的条件查询 。
    //需求：目前3个有查询条件，分别是 姓名包含“阿三”，住址在湖北且看看在20-28岁。
    //    如果哪个查询条件没写即是空的，则忽略这个查询条件
    public void testFind2(){
        String paramName = "";
        String paramAddress = "";
        Integer begin_age = 0;
        Integer end_age=0;

        //第1步：先创建一个保存查询条件的对象
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        //第2步：先判断查询条件是否为空，如果不为空则添加上这个查询条件
        //条件1：学生姓名
        if (paramName != null && !("".equals(paramName))  ) {
            wrapper.like("name", paramName);
        }
        if (paramAddress != null && !("".equals(paramAddress))  ) {
            wrapper.like("address", paramAddress);
        }
        if (begin_age != null) {
            wrapper.ge("age", begin_age);
        }
        if (end_age != null) {
            wrapper.le("age", end_age);
        }

        //第3步：根据封装的查询条件，调用内置查询方法，获取查询结果
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }
}
